package br.com.sms.dominio;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

import br.com.sms.enuns.TipoMalaDireta;
import br.com.sms.util.DataUtil;

@Entity
public class MalaDireta {
	
	private int id;
	private Mensagem mensagem;
	private Date dataEnvioMalaDireta;
	private Date dataCriacao;
	private Set<Destinatario> destinatarios;
	private TipoMalaDireta tipo;
	
	//variaves transiente
	private Set<Integer> destinatariosIds;
	private String dataCriacaoFormatada;
	private String dataEnvioFormatada;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="CO_MALADIRETA")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@ManyToOne
	@JoinColumn(name="CO_MENSAGEM")
	public Mensagem getMensagem() {
		return mensagem;
	}
	public void setMensagem(Mensagem mensagem) {
		this.mensagem = mensagem;
	}
	
	@Column(name="data_criacao")
	public Date getDataCriacao() {
		return dataCriacao;
	}
	
	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}
	
	@Column(name="data_envio")
	public Date getDataEnvioMalaDireta() {
		return dataEnvioMalaDireta;
	}
	public void setDataEnvioMalaDireta(Date dataEnvioMalaDireta) {
		this.dataEnvioMalaDireta = dataEnvioMalaDireta;
	}
	
	@ManyToMany(fetch=FetchType.EAGER)
	@JoinTable(name="malaDireta_destinatario", joinColumns={@JoinColumn(name="CO_MALADIRETA", insertable=true, updatable=true)},
			inverseJoinColumns={@JoinColumn(name="CO_DESTINATARIO")})
	public Set<Destinatario> getDestinatarios() {
		return destinatarios;
	}
	public void setDestinatarios(Set<Destinatario> destinatarios) {
		this.destinatarios = destinatarios;
	}
	
	@Transient
	public Set<Integer> getDestinatariosIds() {
		if(destinatariosIds == null)
			destinatariosIds = new HashSet<Integer>();
		
		for (Destinatario des : this.destinatarios) {
			destinatariosIds.add(des.getId());
		}
		return destinatariosIds;
	}
	public void setDestinatariosIds(Set<Integer> destinatariosIds) {
		this.destinatariosIds = destinatariosIds;
	}
	
	@Transient
	public String getDataCriacaoFormatada() {
		return DataUtil.getDataFormatadaComHoras(dataCriacao);
	}
	
	@Transient
	public String getDataEnvioFormatada() {
		return DataUtil.getDataFormatadaComHoras(dataEnvioMalaDireta);
	}
	
	@Enumerated(value=EnumType.STRING)
	public TipoMalaDireta getTipo() {
		return tipo;
	}
	public void setTipo(TipoMalaDireta tipo) {
		this.tipo = tipo;
	}
	

	
	
	
}
